home *** CD-ROM | disk | FTP | other *** search
/ Chip 2005 July / CHIP_CD_2005-07.iso / software / att / attsetup.exe / Smart Shaders / Sharpen.pss < prev   
Text File  |  2004-01-16  |  3KB  |  100 lines

  1. shader convolutionPixelShader= 
  2. "!!ARBfp1.0
  3.  
  4. # This is a general purpose 3x3 convolution filter.  Unused instructions
  5. # and constants will get culled out by the driver so no need to remove them here.
  6.  
  7. PARAM  texCoord00 = program.local[0];
  8. PARAM  texCoord01 = program.local[1];
  9. PARAM  texCoord02 = program.local[2];
  10. PARAM  texCoord10 = program.local[3];
  11. PARAM  texCoord12 = program.local[5];
  12. PARAM  texCoord20 = program.local[6];
  13. PARAM  texCoord21 = program.local[7];
  14. PARAM  texCoord22 = program.local[8];
  15.  
  16. # These constants are setup to do a sharpen filter.
  17. PARAM  const00 = {-1.0, -1.0, -1.0, 0.0};
  18. PARAM  const01 = {-1.0, -1.0, -1.0, 0.0};
  19. PARAM  const02 = {-1.0, -1.0, -1.0, 0.0};
  20. PARAM  const10 = {-1.0, -1.0, -1.0, 0.0};
  21. PARAM  const11 = {9.0, 9.0, 9.0, 0.0};
  22. PARAM  const12 = {-1.0, -1.0, -1.0, 0.0};
  23. PARAM  const20 = {-1.0, -1.0, -1.0, 0.0};
  24. PARAM  const21 = {-1.0, -1.0, -1.0, 0.0};
  25. PARAM  const22 = {-1.0, -1.0, -1.0, 0.0};
  26.  
  27. TEMP   finalPixel;
  28. TEMP   coord00;
  29. TEMP   coord01;
  30. TEMP   coord02;
  31. TEMP   coord10;
  32. TEMP   coord11;
  33. TEMP   coord12;
  34. TEMP   coord20;
  35. TEMP   coord21;
  36. TEMP   coord22;
  37.  
  38. OUTPUT oColor = result.color;
  39.  
  40. # Generate all the texture coordinates for the 9 texture lookups
  41. ADD coord00, texCoord00, fragment.texcoord[0];
  42. ADD coord01, texCoord01, fragment.texcoord[0];
  43. ADD coord02, texCoord02, fragment.texcoord[0];
  44. ADD coord10, texCoord10, fragment.texcoord[0];
  45. ADD coord12, texCoord12, fragment.texcoord[0];
  46. ADD coord20, texCoord20, fragment.texcoord[0];
  47. ADD coord21, texCoord21, fragment.texcoord[0];
  48. ADD coord22, texCoord22, fragment.texcoord[0];
  49.  
  50. # Do the texture lookups for the 3x3 kernel
  51. TEX coord00, coord00, texture[0], 2D;
  52. TEX coord01, coord01, texture[0], 2D;
  53. TEX coord02, coord02, texture[0], 2D;
  54. TEX coord10, coord10, texture[0], 2D;
  55. TEX coord11, fragment.texcoord[0], texture[0], 2D;
  56. TEX coord12, coord12, texture[0], 2D;
  57. TEX coord20, coord20, texture[0], 2D;
  58. TEX coord21, coord21, texture[0], 2D;
  59. TEX coord22, coord22, texture[0], 2D;
  60.  
  61. # Multiply all texture lookups by their weights and sum them up
  62. MUL finalPixel, coord00, const00;
  63. MAD finalPixel, coord10, const10, finalPixel;
  64. MAD finalPixel, coord20, const20, finalPixel;
  65. MAD finalPixel, coord01, const01, finalPixel;
  66. MAD finalPixel, coord11, const11, finalPixel;
  67. MAD finalPixel, coord21, const21, finalPixel;
  68. MAD finalPixel, coord02, const02, finalPixel;
  69. MAD finalPixel, coord12, const12, finalPixel;
  70. MAD oColor, coord22, const22, finalPixel;
  71. END";
  72.  
  73. shader copyPixelShader = 
  74. "!!ARBfp1.0
  75. OUTPUT oColor = result.color;
  76. TEMP pixel;
  77. TEX pixel, fragment.texcoord[0], texture[0], 2D;
  78. MOV oColor, pixel;
  79. END";
  80.  
  81. surface temp = allocsurf(width, height);
  82.  
  83. convolutionPixelShader.constant[0] = {-ds_dx, -dt_dy, 0, 0};
  84. convolutionPixelShader.constant[1] = {0,      -dt_dy, 0, 0};
  85. convolutionPixelShader.constant[2] = {ds_dx,  -dt_dy, 0, 0};
  86. convolutionPixelShader.constant[3] = {-ds_dx, 0,      0, 0};
  87. convolutionPixelShader.constant[4] = {ds_dx,  0,      0, 0};
  88. convolutionPixelShader.constant[5] = {-ds_dx, dt_dy,  0, 0};
  89. convolutionPixelShader.constant[6] = {0,      dt_dy,  0, 0};
  90. convolutionPixelShader.constant[7] = {ds_dx,  dt_dy,  0, 0};
  91.  
  92. texture[0].source = backbuffer;
  93. destination temp;
  94. apply convolutionPixelShader;
  95.  
  96.  
  97. texture[0].source = temp;
  98. destination backbuffer;
  99. apply copyPixelShader;
  100.